Nonlinear Control Systems

Suba Thomas

Wolfram Research Inc.

Introduction

Overview

Requirements

Modeling

Design

Implementation

Testing

What

TabView@{v8->(Legended[, (SwatchLegend["Standard linear systems"])]),v9->(Legended[, (SwatchLegend["Standard linear systems", "Linear systems with delays", "Linear systems with algebraic constraints", "Linear systems with delays & constraints"])]),v10->(Legended[, (SwatchLegend["Standard linear systems", "Linear systems with delays", "Linear systems with algebraic constraints", "Linear systems with delays & constraints", "Systems that are not linear"])])}

Why

The vast majority of the systems that have to be analyzed and controlled are not linear. Input-linear models naturally occur in many areas, and occasionally the inputs appear nonlinearly.

Taylor linearization

Background

Start with an affine state-space model:

𝓍' == 𝒶 (𝓍) + 𝒷 (𝓍).𝓊 
𝓎 = 𝒸 (𝓍) + 𝒹 (𝓍).𝓊

AffineStateSpaceModel[{{a[x]},{{b[x]}},{c[x]},{{d[x]}}},{x}]

or a nonlinear state-space model:

𝓍' == 𝒻(𝓍,𝓊) 
𝓎 = ℊ(𝓍,𝓊)

NonlinearStateSpaceModel[{{f[x,u]},{g[x,u]}},{x},{u}]

Carry out Taylor linearization and neglect the higher order terms:

Δ𝓍=𝓍-(Subscript[𝓍, 0]), Δ𝓊=𝓊-(Subscript[𝓊, 0]), Δ𝓎=𝓎-(Subscript[𝓎, 0])

Δ𝓍' ==(∂_𝓍) f((Subscript[𝓍, 0,])(Subscript[𝓊, 0]))Δ𝓍+(∂_𝓊)f((Subscript[𝓍, 0,])(Subscript[𝓊, 0]))Δ𝓊+h.o.t
Δ𝓎=(∂_𝓍)g((Subscript[𝓍, 0]),(Subscript[𝓊, 0]))Δ𝓍+(∂_𝓊)g((Subscript[𝓍, 0]),(Subscript[𝓊, 0]))Δ𝓊+h.o.t

And get a linear state-space model:

Δ𝓍’ == 𝒶.Δ𝓍 + 𝒷.Δ𝓊 
Δ𝓎 = 𝒸.Δ𝓍+ 𝒹.Δ𝓊

StateSpaceModel[{{{a}},{{b}},{{c}},{{d}}}]

StateSpaceModel[(NonlinearStateSpaceModelFull[f[x,u], g[x,u], {x,(Subscript[x, 0])}, ,  , {{u,(Subscript[u, 0])}}Automatic, ])]

The controller design and analysis is then carried out using the linear model.

Example

Starting with a nonlinear model, design a linear controller and evaluate the performance of the controller on the nonlinear system.

The model of an inverted pendulum is nonlinear, but linear in the input force F.

eqns={(M+m)x''[t]+m l Sin[θ[t]] ((θ'[t])^2)-m l Cos[θ[t]] θ''[t]==F[t], l θ''[t]-x''[t] Cos[θ[t]]-g Sin[θ[t]]==0};

pars={l->1,m->0.2,M->0.3,g->9.8};

pend=AffineStateSpaceModel[eqns,{θ[t],x[t]},{F[t]},{θ[t],x[t]},t]

Design a controller based on the linear model.

k=StateFeedbackGains[pend/.pars,{-2,-3+I,-3-I,-4}]

Connect the linear controller to the nonlinear model.

csys=SystemsModelStateFeedbackConnect[pend,k]

Simulate the nonlinear closed-loop system.

res=OutputResponse[{csys/.pars,{30 °,0,0,0}},0,{t,0,4}];

Plot[res,{t,0,4},PlotRange->All,PlotLegends->{θ[t],x[t]}]

The control effort:

-k/.Thread[Table[(Subscript[\[FormalX], i])[t],{i,4}]->StateResponse[{csys/.pars,{30 °,0,0,0}},0,{t,0,4}]];
Plot[%,{t,0,4},PlotRange->All]

Carleman linearization

Background

Start with a nonlinear state-space model:

𝓍' == 𝒻(𝓍,𝓊) 
𝓎 = ℊ(𝓍,𝓊)

Carry out Taylor linearization and neglect the higher order control terms:

Δ𝓊=𝓊-(Subscript[𝓊, 0]), Δ𝓎=𝓎-(Subscript[𝓎, 0])

𝓍'==(∑_(i=0)^p)(Subscript[(UnderBar[a]), i])(𝓍^i)+(UnderBar[b]). Δ𝓊+h.o.t
Δ𝓎=(∑_(i=0)^p)(Subscript[(UnderBar[c]), i])(𝓍^i)+(UnderBar[d]).Δ𝓊+h.o.t

Choose (Subscript[z, i])(t) = (𝓍^i)(t) as the new states:

(Subscript[z, i])'(t)==(∑_(i=0)^p)(Subscript[a, i])(Subscript[z, i])+b ((Subscript[z, i])) Δ𝓊+(Subscript[b, 0])Δ𝓊
Δ𝓎=(∑_(i=0)^p)(Subscript[c, i])(Subscript[z, i])+d Δ𝓊

Example

Design a therapy for HIV-1 infection based on Carleman linearization. The parameters are the decay rate d and production rate s of healthy cells, infection rate coefficient θ, and decay rate μ of the virus:

pars={d->0.02,s->10,θ->0.001,μ->0.24};

The states are the levels of healthy cells (Subscript[x, 1]) and free virus (Subscript[x, 2]), and the input is the drug dosage:

asys=(AffineStateSpaceModelFull[s-d (Subscript[x, 1])-θ (Subscript[x, 1]) (Subscript[x, 2]), -μ (Subscript[x, 2])+θ (Subscript[x, 1]) (Subscript[x, 2]), θ (Subscript[x, 1]) (Subscript[x, 2]), -θ (Subscript[x, 1]) (Subscript[x, 2]), {(Subscript[x, 1]),((s-r μ)/d)}, {(Subscript[x, 2]),r}, , ,  , {{u,((s θ-d μ-r θ μ)/(θ (s-r μ)))}}Automatic, ])/.pars

At the target level of 10, a low dosage results in increased virus levels:

sr=StateResponse[asys/.r->10,0.1,{t,0,20}];
Table[Plot[sr,{t,0,20}],{sr,sr}]

Carleman linearize the system:

𝒞ℒ=CarlemanLinearize[asys/.r->10,{{(Subscript[x, 1]),(Subscript[x, 2]),(Subscript[x, 1])(Subscript[x, 2])}}]

Design a controller for the linearized, higher-order system:

ssm=StateSpaceModel[𝒞ℒ["TransformedSystem"]];

κ=LQRegulatorGains[ssm,{DiagonalMatrix[{0.1,50,25}],{{3000}}}]

The closed-loop system:

csys=𝒞ℒ[{"ClosedLoopSystem",κ}]//Simplify

The controller brings the healthy cell and virus concentrations to the desired levels:

sr=StateResponse[{csys,{370,14}},0,{t,0,600}];
Table[Plot[sr,{t,0,600}],{sr,sr}]

The dosage level:

-𝒞ℒ[{"OriginalSystemController",κ}];
Plot[%/.Thread[{(Subscript[x, 1]),(Subscript[x, 2])}->sr],{t,0,600}]

Feedback linearization

Simple example

M(x) x''+C(x)x'+K(x)==u,

Choose u=C(x) x'+K(x)+M(x) v, where v is a new feedback variable.

The dynamics are now linear!: x''=v

Systematic approach

x'==a(x)+b(x)u
y=c(x)

Let (Subscript[z, 1])=y=c(x).

Let (Subscript[z, 2])=y'=(∂_x)c(x).(a(x)+b(x)u), and assume (∂_x)c(x).b(x)=0

Thus,
(Subscript[z, 2])=(∂_x)c(x).a(x)=(Subscript[ℒ, a(x)])c(x) and (Subscript[z, 1])'==(Subscript[z, 2])
⋮
(Subscript[z, n-1])=(Subscript[ℒ, a(x)]^(n-2))c(x) and (Subscript[z, n-1])'==(Subscript[z, n-2])
(Subscript[z, n])=(Subscript[ℒ, a(x)]^(n-1))c(x) and (Subscript[z, n])'==α(x)+β(x).u

Set α(x)+β(x).u=(OverHat[u]), and a linear system follows...

(Subscript[z, 1])'==(Subscript[z, 2])
⋮
(Subscript[z, n-1])'==(Subscript[z, n-2])
(Subscript[z, n])'==(OverHat[u])
y==(Subscript[z, 1])

Summary

Example

Design a controller to suppress the oscillations in an axial flow compressor. A model of the compressor with throttle as input:

asys=(AffineStateSpaceModelFull[1.56` -ΔP+1.5` (-1+(Subscript[m, c]))-0.5` (((-1+(Subscript[m, c])))^3), ((Subscript[m, c])/b), 0, -((ΔP)/b), (Subscript[m, c]), 0, {(Subscript[m, c]),2.5413`}, {ΔP,2.0413`}, ,  , {{(Subscript[u, 1]),1.244938`}}Automatic, ]);

Simulations show the presence of surge-like oscillations:

ParametricPlot[Evaluate@StateResponse[asys/.b->2,0,{t,0,200}],{t,50,200}]

Feedback linearize the system:

ℱ=FeedbackLinearize[asys]

Design a controller to suppress the oscillations:

StateFeedbackGains[ℱ["LinearSystem"],{-2+I,-2-I}]

The closed-loop system:

csys=ℱ[{"ClosedLoopSystem",%}]//Simplify

Simulations show that the oscillations have been suppressed:

StateResponse[{csys,RandomReal[{0,1},2]},0,{t,0,10}];
Plot[%,{t,0,3},PlotRange->All]

Output tracking

Background

The problem is to determine a control law that causes the output of the system to converge asymptotically to the prescribed reference trajectory.

The control law is based on the linearized subsystem obtained by feedback linearization, and it is essential to know the number of states in the linear subsystem.

The number of states in the linear subsystem is given by the total of the vector relative orders.

Example

The glycolytic-glycogenolytic pathway where the rates of metabolites (Subscript[x, 4]), (Subscript[x, 5]), and (Subscript[x, 8]) are taken as the manipulated variables, and (Subscript[x, 6]), (Subscript[x, 7]), (Subscript[x, 9]), and (Subscript[x, 10]) are kept constant. Design a feedback law that maintains the values of the metabolites (Subscript[x, 1]), (Subscript[x, 2]), and (Subscript[x, 3]) at 0.2`, 0.5`, and 0.4`:

A model of the system:

constants={(Subscript[x, 6])[t]->3,(Subscript[x, 7])[t]->40,(Subscript[x, 9])[t]->2.86,(Subscript[x, 10])[t]->4};

asys=(AffineStateSpaceModelFull[0.07788 (((Subscript[x, 4])[t])^0.66) (Subscript[x, 6])[t]-((1.0627 (((Subscript[x, 1])[t])^1.53) (Subscript[x, 7])[t])/(((Subscript[x, 2])[t])^0.59)), -((0.00079 (((Subscript[x, 2])[t])^3.97) (Subscript[x, 8])[t])/(((Subscript[x, 3])[t])^3.06))+((0.585 (((Subscript[x, 1])[t])^0.95) (((Subscript[x, 5])[t])^0.32) (((Subscript[x, 7])[t])^0.62) (((Subscript[x, 10])[t])^0.38))/(((Subscript[x, 2])[t])^0.41)), ((0.00079 (((Subscript[x, 2])[t])^3.97) (Subscript[x, 8])[t])/(((Subscript[x, 3])[t])^3.06))-1.0588 (((Subscript[x, 3])[t])^0.3) (Subscript[x, 9])[t], 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, (Subscript[x, 1])[t], (Subscript[x, 2])[t], (Subscript[x, 3])[t], 0, 0, 0, 0, 0, 0, 0, 0, 0, {(Subscript[x, 1])[t],0.067}, {(Subscript[x, 2])[t],0.465}, {(Subscript[x, 3])[t],0.15}, {(Subscript[x, 4])[t],10}, {(Subscript[x, 5])[t],5}, {(Subscript[x, 8])[t],136}, , , ,  , Automatict, ])/. constants;

A feedback law that maintains the values of (Subscript[x, 1]), (Subscript[x, 2]), and (Subscript[x, 3]) at 0.2`, 0.5`, and 0.4`:

fb=AsymptoticOutputTracker[asys,{0.2,0.5,0.4},{-0.5+I,-0.5-I,-1+I ,-1-I,-2,-2.5}];

SystemsModelVectorRelativeOrders[asys]

Simulate the closed-loop system:

csys=SystemsModelStateFeedbackConnect[asys,fb];
Plot[Evaluate@OutputResponse[csys,{0,0,0},{t,0,7}],{t,0,7}]

The control effort:

fb/.Thread[{(Subscript[x, 1])[t],(Subscript[x, 2])[t],(Subscript[x, 3])[t],(Subscript[x, 4])[t],(Subscript[x, 5])[t],(Subscript[x, 8])[t]}-> StateResponse[csys,{0,0,0},{t,0,7}]];

GraphicsRow[Table[Plot[i,{t,0,7},PlotRange->All,ImageSize->145],{i,%}]]

Output regulation

Background

The output regulation problem is to regulate the output of a system in the presence of exogenous disturbances or cause the output to track a desired trajectory.

Example

Regulate the height of the liquid in the lower tank whose net flow rate is subject to an exogenous disturbance. The control input is the flow into the upper tank.

Use Bernoulli's law and mass balance to derive the resulting differential equations.

eqs={(Subscript[𝒜, 1])(Subscript[𝒽, 1])'[t]==𝒬[t]-𝒸 (Subscript[𝒶, 1])(Sqrt[2ℊ (Subscript[𝒽, 1])[t]]),(Subscript[𝒜, 2])(Subscript[𝒽, 2])'[t]==𝒸 (Subscript[𝒶, 1])(Sqrt[2ℊ (Subscript[𝒽, 1])[t]])-𝒸 (Subscript[𝒶, 2])(Sqrt[2ℊ (Subscript[𝒽, 2])[t]])-𝒬𝒹[t],𝒬𝒹'[t]==0};

Use steady-state operating values {((𝓆^2)/(2 (𝒸^2) ℊ (Subscript[𝒶, 1]^2))),((((𝓆-𝓆𝒹))^2)/(2 (𝒸^2) ℊ (Subscript[𝒶, 2]^2))),𝓆𝒹}.

op={(Subscript[𝒽, 1])[t]->((𝓆^2)/(2 (𝒸^2) ℊ (Subscript[𝒶, 1]^2))),(Subscript[𝒽, 2])[t]->((((𝓆-𝓆𝒹))^2)/(2 (𝒸^2) ℊ (Subscript[𝒶, 2]^2))),𝒬𝒹[t]->𝓆𝒹,𝒬[t]->𝓆};
PowerExpand[eqs/.op]

Define the corresponding nonlinear system with input 𝒬 and output (Subscript[𝒽, 2])-(Subscript[ℋ, ref]).

pars={𝒸->0.7,ℊ->9.8,(Subscript[𝒜, 1])->π (4^2),(Subscript[𝒶, 1])->π (0.25^2),(Subscript[𝒜, 2])->π (3^2),(Subscript[𝒶, 2])->π (0.25^2),𝓆->1,(Subscript[ℋ, ref])->3};

dtank=NonlinearStateSpaceModel[eqs,op[[1;;3]],op[[-1]],{(Subscript[𝒽, 2])[t]-(Subscript[ℋ, ref])},t]/.pars

The feedback law.

𝓀=FullInformationOutputRegulator[dtank,{-0.5,-1}]//Simplify

The closed-loop system.

csys=SystemsModelStateFeedbackConnect[dtank,𝓀]//Simplify

A polynomial disturbance is approximated as a piecewise constant function.

𝒹=-0.003+0.0013 x+0.00016 (x^2)-1.613 (10^(-6)) (x^3)+4.069 (10^(-9)) (x^4);
(Subscript[𝒹, 𝒶])=Piecewise[Table[{𝒹,x≤t<x+1},{x,0,200,1}],0.2634];

Plot[(Subscript[𝒹, 𝒶]),{t,0,250}(*,Exclusions->None*)]

Assemble the simulation model and simulate the state responses.

csys1=NonlinearStateSpaceModel[csys,Join[op[[1;;2]],{{𝒬𝒹[t],0}}]/.pars/.𝓆𝒹->0]/.𝓆𝒹->(Subscript[𝒹, 𝒶]);

sr=StateResponse[csys1,0,{t,0,30}];

The plot shows that the desired regulation has been achieved.

Plot[Evaluate@sr[[{1,2}]],{t,0,30},PlotLegends->{"(Subscript[𝒽, 1])","(Subscript[𝒽, 2])"}]

Controllability

Parking problem

a={0,0,0,0};
b={{Cos[θ+ϕ],0},{Sin[θ+ϕ],0},{Sin[θ],0},{0,1}};

veh=AffineStateSpaceModel[{a,b,{x,y}},{x,y,ϕ,θ}]

ControllableModelQ[StateSpaceModel[veh]]

ControllableModelQ[veh]

Simulations

Move the vehicle around using a combination of drive and steer:

inp={({{\[Piecewise], ({{1, 0≤t≤1}, {0, 1<t≤2}, {-1, 2<t≤3}, {0, True}})}}),({{\[Piecewise], ({{0, 0≤t≤1}, {1, 1<t≤2}, {0, 2<t≤3}, {-1, 3<t≤4}, {0, True}})}})};

Simulate the motion:

traj=OutputResponse[veh,inp,{t,0,5}];

{Plot[traj,{t,0,5}],ParametricPlot[traj,{t,0,5},Frame->True,Axes->False,PlotRange->{{-0.1,1.1},{-0.6,0.1}}]}

The linearized model only captures motion in one direction:

trajl=OutputResponse[StateSpaceModel[veh],inp,{t,0,5}];

{Plot[trajl,{t,0,5}],ParametricPlot[trajl,{t,0,5},Frame->True,Axes->False,PlotRange->{{-0.1,1.1},{-0.6,0.1}}]}

Computations

The controllability distribution:

(Subscript[Δ, c])=⟨a,(Subscript[b, 1]),…,(Subscript[b, m])|span{(Subscript[b, 1]),…,(Subscript[b, m])}⟩

{drive,steer}=Transpose[b];

wriggle=Control`DiffGeom`LieDerivative[{"Vector",steer},drive,{x,y,ϕ,θ}]

Control`DiffGeom`LieBracket[drive,steer,{x,y,ϕ,θ}](*drive, steer, rdrive, rsteer*)

slide=Control`DiffGeom`LieDerivative[{"Vector",drive},wriggle,{x,y,ϕ,θ}]//Simplify
(*drive, steer, rdrive, rsteer,  
drive,
rdrive, rsteer, drive, steer,rdrive*)

(dist=ArrayFlatten[{{b,{wriggle}\[Transpose],{slide}\[Transpose]}}])//MatrixForm

MatrixRank[dist]

The controllability distribution for linear systems (a(x) = A x, b’s are constants):

(Subscript[Δ, c])={b,a.b,…}

Controllable decomposition

An affine system.

asys=(AffineStateSpaceModelFull[(Subscript[x, 2]), -(Subscript[x, 1]), 0, (Subscript[x, 3]), 0, -(Subscript[x, 1]), (Subscript[x, 1]), 0, (Subscript[x, 1]), (Subscript[x, 2]), (Subscript[x, 3]), ,  , AutomaticAutomatic, ]);

Its reachable subspace is a sphere.

{{p1,p2},csys}=ControllableDecomposition[asys,{(Subscript[z, 1]),(Subscript[z, 2]),(Subscript[z, 3])}];

VectorQ[p2]

p2[[-1]]

The transformation reveals that it is confined to a specific sphere because (Subscript[z, 3])'==0.

StateSpaceTransform[asys,{p1,Flatten@p2}]

The system starts and remains on the same sphere for all inputs.

Manipulate[x0=Table[With[{xyz=RandomVariate[NormalDistribution[],3]},r xyz/Norm[xyz]],{n}];sr=Table[StateResponse[{asys,x},u,{t,0,10}],{x,x0}];ParametricPlot3D[sr,{t,0,10},PlotRange->1.3,ImageSize->Medium],{{u,0,"System input"},{0,UnitStep[t],Sin[t],t}},{{r,1.2,"Radius of the sphere"},1,1.3,0.1},{{n,40,"No of sample points"},1,100},SaveDefinitions->True]

Fully integrated

State space transformation

assm=(AffineStateSpaceModelFull[(Subscript[x, d]), (Subscript[y, d]), -((x (g (x^4)+g (y^4)-(y^2) (2 g (r^2)+(Sqrt[(r^2)-(x^2)-(y^2)]) (Subscript[x, d]^2))+2 x y (Sqrt[(r^2)-(x^2)-(y^2)]) (Subscript[x, d]) (Subscript[y, d])-(x^2) (2 g (r^2)-2 g (y^2)+(Sqrt[(r^2)-(x^2)-(y^2)]) (Subscript[y, d]^2))+(r^2) (g (r^2)+(Sqrt[(r^2)-(x^2)-(y^2)]) (Subscript[x, d]^2)+(Sqrt[(r^2)-(x^2)-(y^2)]) (Subscript[y, d]^2))))/((r^2) ((((r^2)-(x^2)-(y^2)))^(3/2)))), -((y (g (x^4)+g (y^4)-(y^2) (2 g (r^2)+(Sqrt[(r^2)-(x^2)-(y^2)]) (Subscript[x, d]^2))+2 x y (Sqrt[(r^2)-(x^2)-(y^2)]) (Subscript[x, d]) (Subscript[y, d])-(x^2) (2 g (r^2)-2 g (y^2)+(Sqrt[(r^2)-(x^2)-(y^2)]) (Subscript[y, d]^2))+(r^2) (g (r^2)+(Sqrt[(r^2)-(x^2)-(y^2)]) (Subscript[x, d]^2)+(Sqrt[(r^2)-(x^2)-(y^2)]) (Subscript[y, d]^2))))/((r^2) ((((r^2)-(x^2)-(y^2)))^(3/2)))), 0, 0, 0, 0, (((r^2)-(x^2))/(m (r^2))), -((x y)/(m (r^2))), -((x y)/(m (r^2))), (((r^2)-(y^2))/(m (r^2))), (Sqrt[(r^2)-(x^2)-(y^2)]), 0, 0, x, y, (Subscript[x, d]), (Subscript[y, d]), ,  , {{(Subscript[F, x]),0},{(Subscript[F, y]),0}}Automatic, ]);

ctrans=Most@CoordinateTransform["Spherical"->"Cartesian",{r,θ[t],ϕ[t]}];

ctransd=D[ctrans,t]/.{θ'->(Subscript[θ, d]),ϕ'->(Subscript[ϕ, d])};

trans=Thread[{x,y,(Subscript[x, d]),(Subscript[y, d])}->Join[ctrans,ctransd]/.var_[t]:>var]

StateSpaceTransform[assm,{trans,{θ,(Subscript[θ, d]),ϕ,(Subscript[ϕ, d])}}]//PowerExpand

Simulation

Simulate a Chua’s circuit for different nonlinear characteristics:

pars={(Subscript[𝒞, 1])->(1/9),(Subscript[𝒞, 2])->1,ℒ->(1/7),ℛ->(1/0.7)};

chua[g_,v_]:=(AffineStateSpaceModelFull[((-g+((-v+(Subscript[𝒱, 2]))/ℛ))/(Subscript[𝒞, 1])), ((-𝒾+((v-(Subscript[𝒱, 2]))/ℛ))/(Subscript[𝒞, 2])), ((Subscript[𝒱, 2])/ℒ), -1, 0, 0, v, (Subscript[𝒱, 2]), 0, 0, {v,-0.2`}, {(Subscript[𝒱, 2]),0}, {𝒾,1}, , ,  , AutomaticAutomatic, ])/.pars

resp[g_,v_]:=(or=OutputResponse[chua[g,v],0,{t,0,90}];
Tooltip[ParametricPlot[or,{t,0,90},PlotRange->All],Plot[g,{v,-5,5}]]
)

Table[resp[g,v],{g,{({{\[Piecewise], ({{0.9 -0.55 (1+v), v<-1}, {-0.9 v, -1≤v≤1}, {-0.9-0.15 (-1+v), v>1}, {0, True}})}}),({{\[Piecewise], ({{0.7 -0.15 (1+v), v<-1}, {-0.7 v, -1≤v≤1}, {-0.7-0.15 (-1+v), v>1}, {0, True}})}}),-0.52v+0.0006 (v^3),-0.5 v}}]

Block diagram connections

The model of an induction motor with an integrator in the q axis:

imotor=(AffineStateSpaceModelFull[-((Subscript[τ, L])/J), -(((Subscript[R, r]) (Subscript[ψ, d]))/(Subscript[L, r])), ω (Subscript[n, p]), -((M (Subscript[n, p]) (Subscript[ψ, d]))/(J (Subscript[L, r]))), 0, 0, ((M (Subscript[R, r]))/(Subscript[L, r])), ((M (Subscript[R, r]))/((Subscript[L, r]) (Subscript[ψ, d]))), 0, ω, ρ, 0, 0, 0, 0, {ω,100}, {(Subscript[ψ, d]),-0.2739`}, {ρ,0.2`}, , ,  , {{(Subscript[i, q]),91.2871`},{(Subscript[i, d]),-3.9123`}}Automatic, ]);

SystemsModelSeriesConnect[(StateSpaceModelFull[0, 1, 0, 1, 0, 0, 0, 0, 1, , ,{{(Subscript[i, q]),91.2871}},{{(Subscript[v, 1]),0},{(Subscript[v, 2]),-3.9123}}, ]),imotor]

Summary

Nonlinear control systems are significant because of the numerous applications.

Many of the tedious symbolic computations involved in nonlinear controller analysis and design have been automated and integrated to work in a clean, unified, and cohesive manner with the rest of the system.

AffineStateSpaceModel and NonlinearStateSpaceModel are the basic modeling functions.

Controller design techiques include exact and approximate linearization, output tracking, and output regulation.

Analysis tools include controllability, observability, relative order computations, state transformation, etc.

http://www.wolfram.com/mathematica/new-in-10/nonlinear-control-systems/

http://reference.wolfram.com/language/guide/NonlinearControlSystems.html